From 86104258d36a2d3b0c92aabd2147c731b792f501 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= Date: Wed, 18 Jun 2014 15:52:25 +0200 Subject: [PATCH] x86: prevent PVH Dom0 from having pages with more than one ref MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit On PV guests a reference is taken when a page gets added to the page tables, which makes pages added to the page tables have two references, but this is not suitable for PVH that doesn't use the PVMMU. In the PVH case only one reference has to be taken or else the page would not be freed when the memory of the domain is decreased. Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper --- xen/arch/x86/domain_build.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index ba42fc90e0..d4473c1bf8 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -1137,10 +1137,13 @@ int __init construct_dom0( L1_PROT : COMPAT_L1_PROT)); l1tab++; - page = mfn_to_page(mfn); - if ( (page->u.inuse.type_info == 0) && - !get_page_and_type(page, d, PGT_writable_page) ) - BUG(); + if ( !paging_mode_translate(d) ) + { + page = mfn_to_page(mfn); + if ( !page->u.inuse.type_info && + !get_page_and_type(page, d, PGT_writable_page) ) + BUG(); + } } if ( is_pv_32on64_domain(d) ) @@ -1300,7 +1303,7 @@ int __init construct_dom0( if ( get_gpfn_from_mfn(mfn) >= count ) { BUG_ON(is_pv_32bit_domain(d)); - if ( !page->u.inuse.type_info && + if ( !paging_mode_translate(d) && !page->u.inuse.type_info && !get_page_and_type(page, d, PGT_writable_page) ) BUG(); -- 2.30.2